package Miscellaneous
{
	import Interfaces.Penguin.MIPenguinFactory;
	import Interfaces.Penguin.MIPenguinObj;
	import Interfaces.PenguinsFarm.MICageBackground;
	import Interfaces.PenguinsFarm.MIPenguinsFarmController;
	import Interfaces.PenguinsFarm.MIPenguinsFarmView;
	
	import ServerNetwork.ServerFunc;
	
	import XMFramework.Interface.Architechture.SMView;
	import XMFramework.Interface.IFramework;
	
	public class GameInitParser
	{
		private static var coreSNSFramework:IFramework;
		
		public function GameInitParser(){}
		
		public static function doStartingGame( core:IFramework ):void
		{
			GameInitParser.coreSNSFramework = core;
			
			// Hiển thị scene chính
			//Global.viewsCab.setActiveScene( ShareMacros.MV_PenguinsFarmScene, onMainSceneInit );
			
			onMainSceneInit( coreSNSFramework.showView( ShareMacros.MODULE_PENGUINS_FARM ));
		}
		
		public static function doLoadFriendCage( friendId:String ):void
		{
			// Reset hệ thống trước khi parse dữ liệu mới vào
			resetApplication();
			
			// Store current cage id. Home or friend
			//Global.networkListener.currentCageId	=	friendId;
			
			// Gọi quest lên server lấy dữ liệu nhà bạn
			ServerFunc.visitFriend( coreSNSFramework, onResponseFriendCage, friendId );
		}
		
		public static function doLoadHomeCage():void
		{
			// Reset hệ thống trước khi parse dữ liệu mới vào
			resetApplication();
			
			// Store current cage id. Home or friend
			//Global.networkListener.currentCageId	=	Global.networkListener.uid;
			
			// Gọi quest lên server lấy dữ liệu nhà user
			ServerFunc.loadInitGame( coreSNSFramework, onResponseHomeCage );
		}
		
		private static function onMainSceneInit( scene:SMView ):void
		{	
			(scene as MIPenguinsFarmView).onInit( null );
			
			// Lấy danh sách bạn bè
			ServerFunc.loadFriendlist( coreSNSFramework, function(error:int, params:Object):void
			{
				// Store danh sách bạn bè vào friendlist model
				// Sau này sẽ có tính năng gửi quà cho bạn. Tính năng đó sẽ sử dụng friendlist
				// Khi đó nó sẽ lấy data lưu trong model friendlist
				//Global.modelCab.parseModel( ShareMacros.MV_FriendList, params.friends );
				
				// Download dữ liệu init home cage
				doLoadHomeCage();
			});
		}
		
		private static function onResponseHomeCage( error:int, params:Object ):void
		{			
			// Hiển thị cái HUI cơ bản trong game
			//Global.viewsCab.showLayer( ShareMacros.MV_UserInfomationBar, false, params );			
			//Global.viewsCab.showLayer( ShareMacros.MV_FriendList, false );
			
			// Loading hình nền
			var view:MIPenguinsFarmView = coreSNSFramework.getArchView( ShareMacros.MODULE_PENGUINS_FARM)as MIPenguinsFarmView;
			if( view != null )
			{
				view.getCageBackground().setBackground( 1 );
				
				// Parse dữ liệu các con peng
				parsePenquins( params.cotes[2].penguins );
			}
		}		
		
		private static function onResponseFriendCage( error:int, params:Object ):void
		{
			// Hiển thị cái HUI cơ bản trong game
			//Global.viewsCab.showLayer( ShareMacros.MV_FriendInfomationBar, false, params.friendInfo );
			//Global.viewsCab.showLayer( ShareMacros.MV_FriendList, false );
			
			// Loading hình nền
			var view:MIPenguinsFarmView = coreSNSFramework.getArchView( ShareMacros.MODULE_PENGUINS_FARM)as MIPenguinsFarmView;
			if( view != null )
			{
				view.getCageBackground().setBackground( params.cage.backgroundId );
				
				// Parse dữ liệu các con peng
				parsePenquins( params.cage.penguins );
			}
		}
		
		//========================================
		
		private static function parsePenquins( penguins:Array ):void
		{
			for( var i:String in penguins )
			{
				var controller:MIPenguinsFarmController = coreSNSFramework.getArchCommand( ShareMacros.MODULE_PENGUINS_FARM)as MIPenguinsFarmController;
				if( controller != null )
				{
					var entData:Object		=	penguins[i];
					var ent:MIPenguinObj	=	controller.createPenguin( entData.type );
					ent.onInit( null, entData );
					controller.addPenguins( ent );
				}
			}
		}
		
		private static function resetApplication():void
		{	
			var controller:MIPenguinsFarmController = coreSNSFramework.getArchCommand( ShareMacros.MODULE_PENGUINS_FARM)as MIPenguinsFarmController;
			controller.removeAllPenguins();
		}
	}
}